using System;
using System.Collections.Generic;
using System.Text;

namespace DS.SludgeEngine.Base
{
    [Serializable]
    public class ActorInfo
    {
        private UnitType type;
        private string name;
        private string model;
        private float scale;
        private float rotationOffset;
        private float rotationNumerator;
        private float rotationDenominator;
        private float modelOffset = 0.0f;
        private float sphereOffset = 0.0f;
        private float rotationSpeed;
        private float travelSpeed;
        private int currentHealth;
        private int maxHealth;
        private float range;
        private float minDamage;
        private float maxDamage;
        private int refireRate;

        /// <summary>
        /// Type of Unit
        /// </summary>
        public UnitType Type
        {
            get { return type; }
            set { type = value; }
        }

        /// <summary>
        /// Name of specific unit type
        /// </summary>
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        /// <summary>
        /// Units main model
        /// </summary>
        public string Model
        {
            get { return model; }
            set { model = value; }
        }

        /// <summary>
        /// Measure to scale unit by when drawing
        /// </summary>
        public float Scale
        {
            get { return scale; }
            set { scale = value; }
        }

        /// <summary>
        /// Rotation offset (if needed).  Used when models base
        /// orientation is different
        /// </summary>
        public float RotationOffset
        {
            get { return rotationOffset; }
            set { rotationOffset = value; }
        }

        /// <summary>
        /// Used for rotation in conjunction with RotationDenominator
        /// In the form RotationNumerator * Pi / RotationDenominator
        /// </summary>
        public float RotationNumerator
        {
            get { return rotationNumerator; }
            set { rotationNumerator = value; }
        }

        /// <summary>
        /// Used for rotation in conjunction with RotationNumerator
        /// In the form RotationNumerator * Pi / RotationDenominator
        /// </summary>
        public float RotationDenominator
        {
            get { return rotationDenominator; }
            set { rotationDenominator = value; }
        }

        /// <summary>
        /// Height offset for model
        /// </summary>
        public float ModelOffset
        {
            get { return modelOffset; }
            set { modelOffset = value; }
        }

        /// <summary>
        /// Height offset for bounding sphere
        /// </summary>
        public float SphereOffset
        {
            get { return sphereOffset; }
            set { sphereOffset = value; }
        }

        /// <summary>
        /// Speed at which a unit can turn
        /// </summary>
        public float RotationSpeed
        {
            get { return rotationSpeed; }
            set { rotationSpeed = value; }
        }

        /// <summary>
        /// Speed at which a unit can travel
        /// </summary>
        public float TravelSpeed
        {
            get { return travelSpeed; }
            set { travelSpeed = value; }
        }

        /// <summary>
        /// Units current health
        /// </summary>
        public int CurrentHealth
        {
            get { return currentHealth; }
            set { currentHealth = value; }
        }

        /// <summary>
        /// Units Maximum Health
        /// </summary>
        public int MaxHealth
        {
            get { return maxHealth; }
            set { maxHealth = value; }
        }

        /// <summary>
        /// Units weapon Range
        /// </summary>
        public float Range
        {
            get { return range; }
            set { range = value; }
        }

        /// <summary>
        /// Units wepaon minimum Damage
        /// </summary>
        public float MinDamage
        {
            get { return minDamage; }
            set { minDamage = value; }
        }

        /// <summary>
        /// Units wepaon minimum Damage
        /// </summary>
        public float MaxDamage
        {
            get { return maxDamage; }
            set { maxDamage = value; }
        }

        /// <summary>
        /// Units weapon refire rate
        /// </summary>
        public int RefireRate
        {
            get { return refireRate; }
            set { refireRate = value; }
        }
    }
}
